#include "bsp_system.h"

//外设列表：
//1.GPIO        LED
//2.PWM         定时器G0,两路PWM
//3.定时器      定时器A0
//4.串口        USART0:调试串口
//5.按键      
//6.OLED      硬件IIC
//7.MPU6050   硬件IIC
//8.串口屏
//9.陀螺仪串口

/*初始加速函数*/
void Speed_InitPro(uint8_t x)
{
    uint8_t temp;
    uint8_t i;
    for(i=0;i<x;i++)
    {
        Set_Speed(i,i);
    }
}

/*开启系统时钟中断，会导致串口工作异常或者程序卡死*/
int main(void)
{
    SYSCFG_DL_init();//syscfg初始化
    delay_ms(50);//等待初始化稳定
    OLED_Init();//OLED初始化
    //OLED_ShowString(16,8,"OK",8);
    delay_ms(50);//等待陀螺仪稳定
    Motor_Off();//初始电机关闭，等待按键控制
    
    SYS_UART0_Init();//串口0初始化
    Screen_UART2_Init();//串口2初始化

    BP_Encoder_Init();//编码器初始化
    PID_Init();
    delay_ms(50);//等待初始化稳定
    //Speed_InitPro(Speed_midset*0.8);

	//编码器中断使能
    delay_ms(50);//等待初始化稳定
    //TIMER_1_Init();//定时器1初始化
    //TIMER_2_Init();

    //NVIC_EnableIRQ(UART_JY61P_INST_INT_IRQN);  
    menu_init();
    scheduler_init();
    while (1) 
    { 
        scheduler_run();
    }
}

/*5ms定时函数，执行复杂计算任务*/
void TIMER_2_INST_IRQHandler(void)
{
switch (DL_TimerG_getPendingInterrupt(TIMER_2_INST)) 
    {
        case DL_TIMER_IIDX_ZERO://如何触发定时器置零中断事件

            break;
        default:
            break;
    }    
}

/*1ms定时器执行函数，执行系统关键计算部分*/
void TIMER_1_INST_IRQHandler(void)
{
    //判断中断事件类型
    static uint8_t counter_10ms;
    static uint8_t counter_2ms;

    switch (DL_TimerG_getPendingInterrupt(TIMER_1_INST)) 
    {
        case DL_TIMER_IIDX_ZERO://如何触发定时器置零中断事件

            break;
        default:
            break;
    }
}



